package com.company.cloud.page.modules.mgr.service.impl;

import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.company.cloud.common.asserts.ValidatorUtils;
import com.company.cloud.common.bean.LoginSimpleUserInfo;
import com.company.cloud.common.constant.BaseConstant;
import com.company.cloud.common.constant.BaseReturnEnum;
import com.company.cloud.common.exception.BusinessException;
import com.company.cloud.common.utils.StrSplitUtils;
import com.company.cloud.page.constant.PageDataTypeEnum;
import com.company.cloud.page.modules.base.entity.PageComponentConfig;
import com.company.cloud.page.modules.base.service.PageComponentConfigService;
import com.company.cloud.page.modules.cache.models.WebPageComponentConfigModel;
import com.company.cloud.page.modules.cache.utils.WebPageConvertUtils;
import com.company.cloud.page.modules.mgr.controller.req.WebPageComponentConfigAdd2EditParam;
import com.company.cloud.page.modules.mgr.controller.req.WebPageComponentConfigListParam;
import com.company.cloud.page.modules.mgr.controller.req.WebPageComponentConfigUpDownParam;
import com.company.cloud.page.modules.mgr.service.WebPageComponentConfigMgrService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;

@Service
public class WebPageComponentConfigMgrServiceImpl implements WebPageComponentConfigMgrService {

    @Autowired
    private PageComponentConfigService pageComponentConfigService;

    @Override
    public List<WebPageComponentConfigModel> list(WebPageComponentConfigListParam params, LoginSimpleUserInfo userInfo) {
       List<PageComponentConfig> list = pageComponentConfigService.list(
               new QueryWrapper<PageComponentConfig>()
               .eq(StrUtil.isNotEmpty(params.getCode()),"code",params.getCode())
               .like(StrUtil.isNotEmpty(params.getName()),"name",params.getName())
               .eq(StrUtil.isNotEmpty(params.getType()),"type",params.getType())
               .eq(StrUtil.isNotEmpty(params.getState()),"state",params.getState())
               .eq("rows_state", BaseConstant.EnabledEnum.ENABLED.getCode())
       );
       List<WebPageComponentConfigModel> data=new ArrayList<>();
       if(!CollectionUtils.isEmpty(list)){
           list.forEach(item->{
               data.add(WebPageConvertUtils.getWebPageComponentConfig(item));
           });
       }
        return data;
    }

    @Override
    public void save(WebPageComponentConfigAdd2EditParam params, LoginSimpleUserInfo userInfo) {
        ValidatorUtils.validate(params);
        PageComponentConfig entity=new PageComponentConfig();
        entity.setCode(params.getCode());
        entity.setName(params.getName());
        entity.setIcon(params.getIcon());
        entity.setType(params.getType());
        entity.setRemark(params.getRemark());
        entity.setScope(StrSplitUtils.list2string(params.getScope()));
        entity.setContent(params.getContent());
        if(!CollectionUtils.isEmpty(params.getJsUrls())){
            entity.setCssUrls(StrSplitUtils.list2string(params.getCssUrls()));
        }
        if(!CollectionUtils.isEmpty(params.getCssUrls())){
            entity.setJsUrls(StrSplitUtils.list2string(params.getJsUrls()));
        }
        entity.setAttribute(params.getAttribute());
        entity.setDataType(params.getDataType());

        if(StrUtil.isNotEmpty(params.getDataType())){
            if(PageDataTypeEnum.PDT_Obj.getCode().equals(params.getDataType())){
                if(params.getData()!=null){
                    entity.setData(JSON.toJSONString(params.getData()));
                }
            }
            if(PageDataTypeEnum.PDT_List.getCode().equals(params.getDataType())){
                if(!CollectionUtils.isEmpty(params.getDataList())){
                    entity.setData(JSON.toJSONString(params.getDataList()));
                }
            }
        }

        if(params.getDs()!=null){
            entity.setDs( JSON.toJSONString(params.getDs()));
        }
        if(!CollectionUtils.isEmpty(params.getDsAttributeRel())){
            entity.setDsAttributeRel(JSON.toJSONString(params.getDsAttributeRel()));
        }
        entity.setOrders(params.getOrders());
        entity.setState(params.getState());
        entity.addCreateParam(userInfo);
        entity.addEditParam(userInfo);
        pageComponentConfigService.save(entity);
    }

    @Override
    public void update(WebPageComponentConfigAdd2EditParam params, LoginSimpleUserInfo userInfo) {
        ValidatorUtils.validate(params);
        PageComponentConfig entity= pageComponentConfigService.getById(params.getCode());
        if(entity==null ||BaseConstant.EnabledEnum.DISABLED.getCode().equals(entity.getRowsState())){
            throw new BusinessException(BaseReturnEnum.DATA_NOT_EXISTS);
        }
        entity.setName(params.getName());
        entity.setIcon(params.getIcon());
        entity.setType(params.getType());
        entity.setRemark(params.getRemark());
        entity.setScope(StrSplitUtils.list2string(params.getScope()));
        entity.setContent(params.getContent());
        if(!CollectionUtils.isEmpty(params.getJsUrls())){
            entity.setCssUrls(StrSplitUtils.list2string(params.getCssUrls()));
        }
        if(!CollectionUtils.isEmpty(params.getCssUrls())){
            entity.setJsUrls(StrSplitUtils.list2string(params.getJsUrls()));
        }
        entity.setAttribute(params.getAttribute());

        entity.setDataType(params.getDataType());
        if(StrUtil.isNotEmpty(params.getDataType())){
            if(PageDataTypeEnum.PDT_Obj.getCode().equals(params.getDataType())){
                if(params.getData()!=null){
                    entity.setData(JSON.toJSONString(params.getData()));
                }
            }
            if(PageDataTypeEnum.PDT_List.getCode().equals(params.getDataType())){
                if(!CollectionUtils.isEmpty(params.getDataList())){
                    entity.setData(JSON.toJSONString(params.getDataList()));
                }
            }
        }

        if(params.getDs()!=null){
            entity.setDs( JSON.toJSONString(params.getDs()));
        }
        if(!CollectionUtils.isEmpty(params.getDsAttributeRel())){
            entity.setDsAttributeRel(JSON.toJSONString(params.getDsAttributeRel()));
        }

        entity.setOrders(params.getOrders());
        entity.setState(params.getState());
        entity.addEditParam(userInfo);
        pageComponentConfigService.updateById(entity);
    }

    @Override
    public WebPageComponentConfigModel info(String code) {
        PageComponentConfig entity= pageComponentConfigService.getById(code);
        if(entity==null || BaseConstant.EnabledEnum.DISABLED.getCode().equals(entity.getRowsState())){
            throw new BusinessException(BaseReturnEnum.DATA_NOT_EXISTS);
        }
        WebPageComponentConfigModel data= WebPageConvertUtils.getWebPageComponentConfig(entity);
        return data;
    }

    @Override
    public void del(String code, LoginSimpleUserInfo userInfo) {
        PageComponentConfig entity= pageComponentConfigService.getById(code);
        if(entity==null){
            throw new BusinessException(BaseReturnEnum.DATA_NOT_EXISTS);
        }
    }

    @Override
    public void updown(WebPageComponentConfigUpDownParam params, LoginSimpleUserInfo userInfo) {
        ValidatorUtils.validate(params);
        PageComponentConfig entity= pageComponentConfigService.getById(params.getCode());
        if(entity==null || BaseConstant.EnabledEnum.DISABLED.getCode().equals(entity.getRowsState())){
            throw new BusinessException(BaseReturnEnum.DATA_NOT_EXISTS);
        }
        if(entity.getState().equals(params.getState())){
            return ;
        }
        entity.setState(params.getState());
        entity.addEditParam(userInfo);
        pageComponentConfigService.updateById(entity);
    }




}
